home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / dev / gcc / ppc-mos-gcc.lha / info / gcc.info-6 (.txt) < prev    next >
GNU Info File  |  2002-06-18  |  49KB  |  962 lines

  1. This is Info file gcc.info, produced by Makeinfo version 1.68 from the
  2. input file ./gcc.texi.
  3. INFO-DIR-SECTION Programming
  4. START-INFO-DIR-ENTRY
  5. * gcc: (gcc).                  The GNU Compiler Collection.
  6. END-INFO-DIR-ENTRY
  7.    This file documents the use and the internals of the GNU compiler.
  8.    Published by the Free Software Foundation 59 Temple Place - Suite 330
  9. Boston, MA 02111-1307 USA
  10.    Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
  11. 1999, 2000 Free Software Foundation, Inc.
  12.    Permission is granted to make and distribute verbatim copies of this
  13. manual provided the copyright notice and this permission notice are
  14. preserved on all copies.
  15.    Permission is granted to copy and distribute modified versions of
  16. this manual under the conditions for verbatim copying, provided also
  17. that the sections entitled "GNU General Public License" and "Funding
  18. for Free Software" are included exactly as in the original, and
  19. provided that the entire resulting derived work is distributed under
  20. the terms of a permission notice identical to this one.
  21.    Permission is granted to copy and distribute translations of this
  22. manual into another language, under the above conditions for modified
  23. versions, except that the sections entitled "GNU General Public
  24. License" and "Funding for Free Software", and this permission notice,
  25. may be included in translations approved by the Free Software Foundation
  26. instead of in the original English.
  27. File: gcc.info,  Node: HPPA Options,  Next: Intel 960 Options,  Prev: i386 Options,  Up: Submodel Options
  28. HPPA Options
  29. ------------
  30.    These `-m' options are defined for the HPPA family of computers:
  31. `-march=ARCHITECTURE TYPE'
  32.      Generate code for the specified architecture.  The choices for
  33.      ARCHITECTURE TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
  34.      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
  35.      an HP-UX system to determine the proper architecture option for
  36.      your machine.  Code compiled for lower numbered architectures will
  37.      run on higher numbered architectures, but not the other way around.
  38.      PA 2.0 support currently requires gas snapshot 19990413 or later.
  39.      The next release of binutils (current is 2.9.1) will probably
  40.      contain PA 2.0 support.
  41. `-mpa-risc-1-0'
  42. `-mpa-risc-1-1'
  43. `-mpa-risc-2-0'
  44.      Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
  45. `-mbig-switch'
  46.      Generate code suitable for big switch tables.  Use this option
  47.      only if the assembler/linker complain about out of range branches
  48.      within a switch table.
  49. `-mjump-in-delay'
  50.      Fill delay slots of function calls with unconditional jump
  51.      instructions by modifying the return pointer for the function call
  52.      to be the target of the conditional jump.
  53. `-mdisable-fpregs'
  54.      Prevent floating point registers from being used in any manner.
  55.      This is necessary for compiling kernels which perform lazy context
  56.      switching of floating point registers.  If you use this option and
  57.      attempt to perform floating point operations, the compiler will
  58.      abort.
  59. `-mdisable-indexing'
  60.      Prevent the compiler from using indexing address modes.  This
  61.      avoids some rather obscure problems when compiling MIG generated
  62.      code under MACH.
  63. `-mno-space-regs'
  64.      Generate code that assumes the target has no space registers.
  65.      This allows GCC to generate faster indirect calls and use unscaled
  66.      index address modes.
  67.      Such code is suitable for level 0 PA systems and kernels.
  68. `-mfast-indirect-calls'
  69.      Generate code that assumes calls never cross space boundaries.
  70.      This allows GCC to emit code which performs faster indirect calls.
  71.      This option will not work in the presense of shared libraries or
  72.      nested functions.
  73. `-mspace'
  74.      Optimize for space rather than execution time.  Currently this only
  75.      enables out of line function prologues and epilogues.  This option
  76.      is incompatible with PIC code generation and profiling.
  77. `-mlong-load-store'
  78.      Generate 3-instruction load and store sequences as sometimes
  79.      required by the HP-UX 10 linker.  This is equivalent to the `+k'
  80.      option to the HP compilers.
  81. `-mportable-runtime'
  82.      Use the portable calling conventions proposed by HP for ELF
  83.      systems.
  84. `-mgas'
  85.      Enable the use of assembler directives only GAS understands.
  86. `-mschedule=CPU TYPE'
  87.      Schedule code according to the constraints for the machine type
  88.      CPU TYPE.  The choices for CPU TYPE are `700' `7100', `7100LC',
  89.      `7200', and `8000'.  Refer to `/usr/lib/sched.models' on an HP-UX
  90.      system to determine the proper scheduling option for your machine.
  91. `-mlinker-opt'
  92.      Enable the optimization pass in the HPUX linker.  Note this makes
  93.      symbolic debugging impossible.  It also triggers a bug in the HPUX
  94.      8 and HPUX 9 linkers in which they give bogus error messages when
  95.      linking some programs.
  96. `-msoft-float'
  97.      Generate output containing library calls for floating point.
  98.      *Warning:* the requisite libraries are not available for all HPPA
  99.      targets.  Normally the facilities of the machine's usual C
  100.      compiler are used, but this cannot be done directly in
  101.      cross-compilation.  You must make your own arrangements to provide
  102.      suitable library functions for cross-compilation.  The embedded
  103.      target `hppa1.1-*-pro' does provide software floating point
  104.      support.
  105.      `-msoft-float' changes the calling convention in the output file;
  106.      therefore, it is only useful if you compile *all* of a program with
  107.      this option.  In particular, you need to compile `libgcc.a', the
  108.      library that comes with GCC, with `-msoft-float' in order for this
  109.      to work.
  110. File: gcc.info,  Node: Intel 960 Options,  Next: DEC Alpha Options,  Prev: HPPA Options,  Up: Submodel Options
  111. Intel 960 Options
  112. -----------------
  113.    These `-m' options are defined for the Intel 960 implementations:
  114. `-mCPU TYPE'
  115.      Assume the defaults for the machine type CPU TYPE for some of the
  116.      other options, including instruction scheduling, floating point
  117.      support, and addressing modes.  The choices for CPU TYPE are `ka',
  118.      `kb', `mc', `ca', `cf', `sa', and `sb'.  The default is `kb'.
  119. `-mnumerics'
  120. `-msoft-float'
  121.      The `-mnumerics' option indicates that the processor does support
  122.      floating-point instructions.  The `-msoft-float' option indicates
  123.      that floating-point support should not be assumed.
  124. `-mleaf-procedures'
  125. `-mno-leaf-procedures'
  126.      Do (or do not) attempt to alter leaf procedures to be callable
  127.      with the `bal' instruction as well as `call'.  This will result in
  128.      more efficient code for explicit calls when the `bal' instruction
  129.      can be substituted by the assembler or linker, but less efficient
  130.      code in other cases, such as calls via function pointers, or using
  131.      a linker that doesn't support this optimization.
  132. `-mtail-call'
  133. `-mno-tail-call'
  134.      Do (or do not) make additional attempts (beyond those of the
  135.      machine-independent portions of the compiler) to optimize
  136.      tail-recursive calls into branches.  You may not want to do this
  137.      because the detection of cases where this is not valid is not
  138.      totally complete.  The default is `-mno-tail-call'.
  139. `-mcomplex-addr'
  140. `-mno-complex-addr'
  141.      Assume (or do not assume) that the use of a complex addressing
  142.      mode is a win on this implementation of the i960.  Complex
  143.      addressing modes may not be worthwhile on the K-series, but they
  144.      definitely are on the C-series.  The default is currently
  145.      `-mcomplex-addr' for all processors except the CB and CC.
  146. `-mcode-align'
  147. `-mno-code-align'
  148.      Align code to 8-byte boundaries for faster fetching (or don't
  149.      bother).  Currently turned on by default for C-series
  150.      implementations only.
  151. `-mic-compat'
  152. `-mic2.0-compat'
  153. `-mic3.0-compat'
  154.      Enable compatibility with iC960 v2.0 or v3.0.
  155. `-masm-compat'
  156. `-mintel-asm'
  157.      Enable compatibility with the iC960 assembler.
  158. `-mstrict-align'
  159. `-mno-strict-align'
  160.      Do not permit (do permit) unaligned accesses.
  161. `-mold-align'
  162.      Enable structure-alignment compatibility with Intel's gcc release
  163.      version 1.3 (based on gcc 1.37).  This option implies
  164.      `-mstrict-align'.
  165. `-mlong-double-64'
  166.      Implement type `long double' as 64-bit floating point numbers.
  167.      Without the option `long double' is implemented by 80-bit floating
  168.      point numbers.  The only reason we have it because there is no
  169.      128-bit `long double' support in `fp-bit.c' yet.  So it is only
  170.      useful for people using soft-float targets.  Otherwise, we should
  171.      recommend against use of it.
  172. File: gcc.info,  Node: DEC Alpha Options,  Next: Clipper Options,  Prev: Intel 960 Options,  Up: Submodel Options
  173. DEC Alpha Options
  174. -----------------
  175.    These `-m' options are defined for the DEC Alpha implementations:
  176. `-mno-soft-float'
  177. `-msoft-float'
  178.      Use (do not use) the hardware floating-point instructions for
  179.      floating-point operations.  When `-msoft-float' is specified,
  180.      functions in `libgcc1.c' will be used to perform floating-point
  181.      operations.  Unless they are replaced by routines that emulate the
  182.      floating-point operations, or compiled in such a way as to call
  183.      such emulations routines, these routines will issue floating-point
  184.      operations.   If you are compiling for an Alpha without
  185.      floating-point operations, you must ensure that the library is
  186.      built so as not to call them.
  187.      Note that Alpha implementations without floating-point operations
  188.      are required to have floating-point registers.
  189. `-mfp-reg'
  190. `-mno-fp-regs'
  191.      Generate code that uses (does not use) the floating-point register
  192.      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
  193.      register set is not used, floating point operands are passed in
  194.      integer registers as if they were integers and floating-point
  195.      results are passed in $0 instead of $f0.  This is a non-standard
  196.      calling sequence, so any function with a floating-point argument
  197.      or return value called by code compiled with `-mno-fp-regs' must
  198.      also be compiled with that option.
  199.      A typical use of this option is building a kernel that does not
  200.      use, and hence need not save and restore, any floating-point
  201.      registers.
  202. `-mieee'
  203.      The Alpha architecture implements floating-point hardware
  204.      optimized for maximum performance.  It is mostly compliant with
  205.      the IEEE floating point standard.  However, for full compliance,
  206.      software assistance is required.  This option generates code fully
  207.      IEEE compliant code *except* that the INEXACT FLAG is not
  208.      maintained (see below).  If this option is turned on, the CPP
  209.      macro `_IEEE_FP' is defined during compilation.  The option is a
  210.      shorthand for: `-D_IEEE_FP -mfp-trap-mode=su -mtrap-precision=i
  211.      -mieee-conformant'.  The resulting code is less efficient but is
  212.      able to correctly support denormalized numbers and exceptional
  213.      IEEE values such as not-a-number and plus/minus infinity.  Other
  214.      Alpha compilers call this option `-ieee_with_no_inexact'.
  215. `-mieee-with-inexact'
  216.      This is like `-mieee' except the generated code also maintains the
  217.      IEEE INEXACT FLAG.  Turning on this option causes the generated
  218.      code to implement fully-compliant IEEE math.  The option is a
  219.      shorthand for `-D_IEEE_FP -D_IEEE_FP_INEXACT' plus the three
  220.      following: `-mieee-conformant', `-mfp-trap-mode=sui', and
  221.      `-mtrap-precision=i'.  On some Alpha implementations the resulting
  222.      code may execute significantly slower than the code generated by
  223.      default.  Since there is very little code that depends on the
  224.      INEXACT FLAG, you should normally not specify this option.  Other
  225.      Alpha compilers call this option `-ieee_with_inexact'.
  226. `-mfp-trap-mode=TRAP MODE'
  227.      This option controls what floating-point related traps are enabled.
  228.      Other Alpha compilers call this option `-fptm 'TRAP MODE.  The
  229.      trap mode can be set to one of four values:
  230.     `n'
  231.           This is the default (normal) setting.  The only traps that
  232.           are enabled are the ones that cannot be disabled in software
  233.           (e.g., division by zero trap).
  234.     `u'
  235.           In addition to the traps enabled by `n', underflow traps are
  236.           enabled as well.
  237.     `su'
  238.           Like `su', but the instructions are marked to be safe for
  239.           software completion (see Alpha architecture manual for
  240.           details).
  241.     `sui'
  242.           Like `su', but inexact traps are enabled as well.
  243. `-mfp-rounding-mode=ROUNDING MODE'
  244.      Selects the IEEE rounding mode.  Other Alpha compilers call this
  245.      option `-fprm 'ROUNDING MODE.  The ROUNDING MODE can be one of:
  246.     `n'
  247.           Normal IEEE rounding mode.  Floating point numbers are
  248.           rounded towards the nearest machine number or towards the
  249.           even machine number in case of a tie.
  250.     `m'
  251.           Round towards minus infinity.
  252.     `c'
  253.           Chopped rounding mode.  Floating point numbers are rounded
  254.           towards zero.
  255.     `d'
  256.           Dynamic rounding mode.  A field in the floating point control
  257.           register (FPCR, see Alpha architecture reference manual)
  258.           controls the rounding mode in effect.  The C library
  259.           initializes this register for rounding towards plus infinity.
  260.           Thus, unless your program modifies the FPCR, `d' corresponds
  261.           to round towards plus infinity.
  262. `-mtrap-precision=TRAP PRECISION'
  263.      In the Alpha architecture, floating point traps are imprecise.
  264.      This means without software assistance it is impossible to recover
  265.      from a floating trap and program execution normally needs to be
  266.      terminated.  GCC can generate code that can assist operating
  267.      system trap handlers in determining the exact location that caused
  268.      a floating point trap.  Depending on the requirements of an
  269.      application, different levels of precisions can be selected:
  270.     `p'
  271.           Program precision.  This option is the default and means a
  272.           trap handler can only identify which program caused a
  273.           floating point exception.
  274.     `f'
  275.           Function precision.  The trap handler can determine the
  276.           function that caused a floating point exception.
  277.     `i'
  278.           Instruction precision.  The trap handler can determine the
  279.           exact instruction that caused a floating point exception.
  280.      Other Alpha compilers provide the equivalent options called
  281.      `-scope_safe' and `-resumption_safe'.
  282. `-mieee-conformant'
  283.      This option marks the generated code as IEEE conformant.  You must
  284.      not use this option unless you also specify `-mtrap-precision=i'
  285.      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
  286.      effect is to emit the line `.eflag 48' in the function prologue of
  287.      the generated assembly file.  Under DEC Unix, this has the effect
  288.      that IEEE-conformant math library routines will be linked in.
  289. `-mbuild-constants'
  290.      Normally GCC examines a 32- or 64-bit integer constant to see if
  291.      it can construct it from smaller constants in two or three
  292.      instructions.  If it cannot, it will output the constant as a
  293.      literal and generate code to load it from the data segment at
  294.      runtime.
  295.      Use this option to require GCC to construct *all* integer constants
  296.      using code, even if it takes more instructions (the maximum is
  297.      six).
  298.      You would typically use this option to build a shared library
  299.      dynamic loader.  Itself a shared library, it must relocate itself
  300.      in memory before it can find the variables and constants in its
  301.      own data segment.
  302. `-malpha-as'
  303. `-mgas'
  304.      Select whether to generate code to be assembled by the
  305.      vendor-supplied assembler (`-malpha-as') or by the GNU assembler
  306.      `-mgas'.
  307. `-mbwx'
  308. `-mno-bwx'
  309. `-mcix'
  310. `-mno-cix'
  311. `-mmax'
  312. `-mno-max'
  313.      Indicate whether GCC should generate code to use the optional BWX,
  314.      CIX, and MAX instruction sets.  The default is to use the
  315.      instruction sets supported by the CPU type specified via `-mcpu='
  316.      option or that of the CPU on which GCC was built if none was
  317.      specified.
  318. `-mcpu=CPU_TYPE'
  319.      Set the instruction set, register set, and instruction scheduling
  320.      parameters for machine type CPU_TYPE.  You can specify either the
  321.      `EV' style name or the corresponding chip number.  GCC supports
  322.      scheduling parameters for the EV4 and EV5 family of processors and
  323.      will choose the default values for the instruction set from the
  324.      processor you specify.  If you do not specify a processor type,
  325.      GCC will default to the processor on which the compiler was built.
  326.      Supported values for CPU_TYPE are
  327.     `ev4'
  328.     `21064'
  329.           Schedules as an EV4 and has no instruction set extensions.
  330.     `ev5'
  331.     `21164'
  332.           Schedules as an EV5 and has no instruction set extensions.
  333.     `ev56'
  334.     `21164a'
  335.           Schedules as an EV5 and supports the BWX extension.
  336.     `pca56'
  337.     `21164pc'
  338.     `21164PC'
  339.           Schedules as an EV5 and supports the BWX and MAX extensions.
  340.     `ev6'
  341.     `21264'
  342.           Schedules as an EV5 (until Digital releases the scheduling
  343.           parameters for the EV6) and supports the BWX, CIX, and MAX
  344.           extensions.
  345. `-mmemory-latency=TIME'
  346.      Sets the latency the scheduler should assume for typical memory
  347.      references as seen by the application.  This number is highly
  348.      dependant on the memory access patterns used by the application
  349.      and the size of the external cache on the machine.
  350.      Valid options for TIME are
  351.     `NUMBER'
  352.           A decimal number representing clock cycles.
  353.     `L1'
  354.     `L2'
  355.     `L3'
  356.     `main'
  357.           The compiler contains estimates of the number of clock cycles
  358.           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
  359.           (also called Dcache, Scache, and Bcache), as well as to main
  360.           memory.  Note that L3 is only valid for EV5.
  361. File: gcc.info,  Node: Clipper Options,  Next: H8/300 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
  362. Clipper Options
  363. ---------------
  364.    These `-m' options are defined for the Clipper implementations:
  365. `-mc300'
  366.      Produce code for a C300 Clipper processor. This is the default.
  367. `-mc400'
  368.      Produce code for a C400 Clipper processor i.e. use floating point
  369.      registers f8..f15.
  370. File: gcc.info,  Node: H8/300 Options,  Next: SH Options,  Prev: Clipper Options,  Up: Submodel Options
  371. H8/300 Options
  372. --------------
  373.    These `-m' options are defined for the H8/300 implementations:
  374. `-mrelax'
  375.      Shorten some address references at link time, when possible; uses
  376.      the linker option `-relax'.  *Note `ld' and the H8/300:
  377.      (ld.info)H8/300, for a fuller description.
  378. `-mh'
  379.      Generate code for the H8/300H.
  380. `-ms'
  381.      Generate code for the H8/S.
  382. `-mint32'
  383.      Make `int' data 32 bits by default.
  384. `-malign-300'
  385.      On the h8/300h, use the same alignment rules as for the h8/300.
  386.      The default for the h8/300h is to align longs and floats on 4 byte
  387.      boundaries.  `-malign-300' causes them to be aligned on 2 byte
  388.      boundaries.  This option has no effect on the h8/300.
  389. File: gcc.info,  Node: SH Options,  Next: System V Options,  Prev: H8/300 Options,  Up: Submodel Options
  390. SH Options
  391. ----------
  392.    These `-m' options are defined for the SH implementations:
  393. `-m1'
  394.      Generate code for the SH1.
  395. `-m2'
  396.      Generate code for the SH2.
  397. `-m3'
  398.      Generate code for the SH3.
  399. `-m3e'
  400.      Generate code for the SH3e.
  401. `-mb'
  402.      Compile code for the processor in big endian mode.
  403. `-ml'
  404.      Compile code for the processor in little endian mode.
  405. `-mdalign'
  406.      Align doubles at 64 bit boundaries.  Note that this changes the
  407.      calling conventions, and thus some functions from the standard C
  408.      library will not work unless you recompile it first with -mdalign.
  409. `-mrelax'
  410.      Shorten some address references at link time, when possible; uses
  411.      the linker option `-relax'.
  412. File: gcc.info,  Node: System V Options,  Next: TMS320C3x/C4x Options,  Prev: SH Options,  Up: Submodel Options
  413. Options for System V
  414. --------------------
  415.    These additional options are available on System V Release 4 for
  416. compatibility with other compilers on those systems:
  417.      Create a shared object.  It is recommended that `-symbolic' or
  418.      `-shared' be used instead.
  419. `-Qy'
  420.      Identify the versions of each tool used by the compiler, in a
  421.      `.ident' assembler directive in the output.
  422. `-Qn'
  423.      Refrain from adding `.ident' directives to the output file (this is
  424.      the default).
  425. `-YP,DIRS'
  426.      Search the directories DIRS, and no others, for libraries
  427.      specified with `-l'.
  428. `-Ym,DIR'
  429.      Look in the directory DIR to find the M4 preprocessor.  The
  430.      assembler uses this option.
  431. File: gcc.info,  Node: TMS320C3x/C4x Options,  Next: V850 Options,  Prev: System V Options,  Up: Submodel Options
  432. TMS320C3x/C4x Options
  433. ---------------------
  434.    These `-m' options are defined for TMS320C3x/C4x implementations:
  435. `-mcpu=CPU_TYPE'
  436.      Set the instruction set, register set, and instruction scheduling
  437.      parameters for machine type CPU_TYPE.  Supported values for
  438.      CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'.  The default
  439.      is `c40' to generate code for the TMS320C40.
  440. `-mbig-memory'
  441. `-mbig'
  442. `-msmall-memory'
  443. `-msmall'
  444.      Generates code for the big or small memory model.  The small memory
  445.      model assumed that all data fits into one 64K word page.  At
  446.      run-time the data page (DP) register must be set to point to the
  447.      64K page containing the .bss and .data program sections.  The big
  448.      memory model is the default and requires reloading of the DP
  449.      register for every direct memory access.
  450. `-mbk'
  451. `-mno-bk'
  452.      Allow (disallow) allocation of general integer operands into the
  453.      block count register BK.
  454. `-mdb'
  455. `-mno-db'
  456.      Enable (disable) generation of code using decrement and branch,
  457.      DBcond(D), instructions.  This is enabled by default for the C4x.
  458.      To be on the safe side, this is disabled for the C3x, since the
  459.      maximum iteration count on the C3x is 2^23 + 1 (but who iterates
  460.      loops more than 2^23 times on the C3x?).  Note that GCC will try
  461.      to reverse a loop so that it can utilise the decrement and branch
  462.      instruction, but will give up if there is more than one memory
  463.      reference in the loop.  Thus a loop where the loop counter is
  464.      decremented can generate slightly more efficient code, in cases
  465.      where the RPTB instruction cannot be utilised.
  466. `-mdp-isr-reload'
  467. `-mparanoid'
  468.      Force the DP register to be saved on entry to an interrupt service
  469.      routine (ISR), reloaded to point to the data section, and restored
  470.      on exit from the ISR.  This should not be required unless someone
  471.      has violated the small memory model by modifying the DP register,
  472.      say within an object library.
  473. `-mmpyi'
  474. `-mno-mpyi'
  475.      For the C3x use the 24-bit MPYI instruction for integer multiplies
  476.      instead of a library call to guarantee 32-bit results.  Note that
  477.      if one of the operands is a constant, then the multiplication will
  478.      be performed using shifts and adds.  If the -mmpyi option is not
  479.      specified for the C3x, then squaring operations are performed
  480.      inline instead of a library call.
  481. `-mfast-fix'
  482. `-mno-fast-fix'
  483.      The C3x/C4x FIX instruction to convert a floating point value to an
  484.      integer value chooses the nearest integer less than or equal to the
  485.      floating point value rather than to the nearest integer.  Thus if
  486.      the floating point number is negative, the result will be
  487.      incorrectly truncated an additional code is necessary to detect
  488.      and correct this case.  This option can be used to disable
  489.      generation of the additional code required to correct the result.
  490. `-mrptb'
  491. `-mno-rptb'
  492.      Enable (disable) generation of repeat block sequences using the
  493.      RPTB instruction for zero overhead looping.  The RPTB construct is
  494.      only used for innermost loops that do not call functions or jump
  495.      across the loop boundaries.  There is no advantage having nested
  496.      RPTB loops due to the overhead required to save and restore the
  497.      RC, RS, and RE registers.  This is enabled by default with -O2.
  498. `-mrpts=COUNT'
  499. `-mno-rpts'
  500.      Enable (disable) the use of the single instruction repeat
  501.      instruction RPTS.  If a repeat block contains a single
  502.      instruction, and the loop count can be guaranteed to be less than
  503.      the value COUNT, GCC will emit a RPTS instruction instead of a
  504.      RPTB.  If no value is specified, then a RPTS will be emitted even
  505.      if the loop count cannot be determined at compile time.  Note that
  506.      the repeated instruction following RPTS does not have to be
  507.      reloaded from memory each iteration, thus freeing up the CPU buses
  508.      for oeprands.  However, since interrupts are blocked by this
  509.      instruction, it is disabled by default.
  510. `-mloop-unsigned'
  511. `-mno-loop-unsigned'
  512.      The maximum iteration count when using RPTS and RPTB (and DB on
  513.      the C40) is 2^31 + 1 since these instructions test if the
  514.      iteration count is negative to terminate the loop.  If the
  515.      iteration count is unsigned there is a possibility than the 2^31 +
  516.      1 maximum iteration count may be exceeded.  This switch allows an
  517.      unsigned iteration count.
  518. `-mti'
  519.      Try to emit an assembler syntax that the TI assembler (asm30) is
  520.      happy with.  This also enforces compatibility with the API
  521.      employed by the TI C3x C compiler.  For example, long doubles are
  522.      passed as structures rather than in floating point registers.
  523. `-mregparm'
  524. `-mmemparm'
  525.      Generate code that uses registers (stack) for passing arguments to
  526.      functions.  By default, arguments are passed in registers where
  527.      possible rather than by pushing arguments on to the stack.
  528. `-mparallel-insns'
  529. `-mno-parallel-insns'
  530.      Allow the generation of parallel instructions.  This is enabled by
  531.      default with -O2.
  532. `-mparallel-mpy'
  533. `-mno-parallel-mpy'
  534.      Allow the generation of MPY||ADD and MPY||SUB parallel
  535.      instructions, provided -mparallel-insns is also specified.  These
  536.      instructions have tight register constraints which can pessimize
  537.      the code generation of large functions.
  538. File: gcc.info,  Node: V850 Options,  Next: ARC Options,  Prev: TMS320C3x/C4x Options,  Up: Submodel Options
  539. V850 Options
  540. ------------
  541.    These `-m' options are defined for V850 implementations:
  542. `-mlong-calls'
  543. `-mno-long-calls'
  544.      Treat all calls as being far away (near).  If calls are assumed to
  545.      be far away, the compiler will always load the functions address
  546.      up into a register, and call indirect through the pointer.
  547. `-mno-ep'
  548. `-mep'
  549.      Do not optimize (do optimize) basic blocks that use the same index
  550.      pointer 4 or more times to copy pointer into the `ep' register, and
  551.      use the shorter `sld' and `sst' instructions.  The `-mep' option
  552.      is on by default if you optimize.
  553. `-mno-prolog-function'
  554. `-mprolog-function'
  555.      Do not use (do use) external functions to save and restore
  556.      registers at the prolog and epilog of a function.  The external
  557.      functions are slower, but use less code space if more than one
  558.      function saves the same number of registers.  The
  559.      `-mprolog-function' option is on by default if you optimize.
  560. `-mspace'
  561.      Try to make the code as small as possible.  At present, this just
  562.      turns on the `-mep' and `-mprolog-function' options.
  563. `-mtda=N'
  564.      Put static or global variables whose size is N bytes or less into
  565.      the tiny data area that register `ep' points to.  The tiny data
  566.      area can hold up to 256 bytes in total (128 bytes for byte
  567.      references).
  568. `-msda=N'
  569.      Put static or global variables whose size is N bytes or less into
  570.      the small data area that register `gp' points to.  The small data
  571.      area can hold up to 64 kilobytes.
  572. `-mzda=N'
  573.      Put static or global variables whose size is N bytes or less into
  574.      the first 32 kilobytes of memory.
  575. `-mv850'
  576.      Specify that the target processor is the V850.
  577. `-mbig-switch'
  578.      Generate code suitable for big switch tables.  Use this option
  579.      only if the assembler/linker complain about out of range branches
  580.      within a switch table.
  581. File: gcc.info,  Node: ARC Options,  Next: NS32K Options,  Prev: V850 Options,  Up: Submodel Options
  582. ARC Options
  583. -----------
  584.    These options are defined for ARC implementations:
  585. `-EL'
  586.      Compile code for little endian mode.  This is the default.
  587. `-EB'
  588.      Compile code for big endian mode.
  589. `-mmangle-cpu'
  590.      Prepend the name of the cpu to all public symbol names.  In
  591.      multiple-processor systems, there are many ARC variants with
  592.      different instruction and register set characteristics.  This flag
  593.      prevents code compiled for one cpu to be linked with code compiled
  594.      for another.  No facility exists for handling variants that are
  595.      "almost identical".  This is an all or nothing option.
  596. `-mcpu=CPU'
  597.      Compile code for ARC variant CPU.  Which variants are supported
  598.      depend on the configuration.  All variants support `-mcpu=base',
  599.      this is the default.
  600. `-mtext=TEXT SECTION'
  601. `-mdata=DATA SECTION'
  602. `-mrodata=READONLY DATA SECTION'
  603.      Put functions, data, and readonly data in TEXT SECTION, DATA
  604.      SECTION, and READONLY DATA SECTION respectively by default.  This
  605.      can be overridden with the `section' attribute.  *Note Variable
  606.      Attributes::.
  607. File: gcc.info,  Node: NS32K Options,  Prev: ARC Options,  Up: Submodel Options
  608. NS32K Options
  609. -------------
  610.    These are the `-m' options defined for the 32000 series.  The default
  611. values for these options depends on which style of 32000 was selected
  612. when the compiler was configured; the defaults for the most common
  613. choices are given below.
  614. `-m32032'
  615. `-m32032'
  616.      Generate output for a 32032.  This is the default when the
  617.      compiler is configured for 32032 and 32016 based systems.
  618. `-m32332'
  619. `-m32332'
  620.      Generate output for a 32332.  This is the default when the
  621.      compiler is configured for 32332-based systems.
  622. `-m32532'
  623. `-m32532'
  624.      Generate output for a 32532.  This is the default when the
  625.      compiler is configured for 32532-based systems.
  626. `-m32081'
  627.      Generate output containing 32081 instructions for floating point.
  628.      This is the default for all systems.
  629. `-m32381'
  630.      Generate output containing 32381 instructions for floating point.
  631.      This also implies `-m32081'. The 32381 is only compatible with the
  632.      32332 and 32532 cpus. This is the default for the pc532-netbsd
  633.      configuration.
  634. `-mmulti-add'
  635.      Try and generate multiply-add floating point instructions `polyF'
  636.      and `dotF'. This option is only available if the `-m32381' option
  637.      is in effect. Using these instructions requires changes to to
  638.      register allocation which generally has a negative impact on
  639.      performance.  This option should only be enabled when compiling
  640.      code particularly likely to make heavy use of multiply-add
  641.      instructions.
  642. `-mnomulti-add'
  643.      Do not try and generate multiply-add floating point instructions
  644.      `polyF' and `dotF'. This is the default on all platforms.
  645. `-msoft-float'
  646.      Generate output containing library calls for floating point.
  647.      *Warning:* the requisite libraries may not be available.
  648. `-mnobitfield'
  649.      Do not use the bit-field instructions. On some machines it is
  650.      faster to use shifting and masking operations. This is the default
  651.      for the pc532.
  652. `-mbitfield'
  653.      Do use the bit-field instructions. This is the default for all
  654.      platforms except the pc532.
  655. `-mrtd'
  656.      Use a different function-calling convention, in which functions
  657.      that take a fixed number of arguments return pop their arguments
  658.      on return with the `ret' instruction.
  659.      This calling convention is incompatible with the one normally used
  660.      on Unix, so you cannot use it if you need to call libraries
  661.      compiled with the Unix compiler.
  662.      Also, you must provide function prototypes for all functions that
  663.      take variable numbers of arguments (including `printf'); otherwise
  664.      incorrect code will be generated for calls to those functions.
  665.      In addition, seriously incorrect code will result if you call a
  666.      function with too many arguments.  (Normally, extra arguments are
  667.      harmlessly ignored.)
  668.      This option takes its name from the 680x0 `rtd' instruction.
  669. `-mregparam'
  670.      Use a different function-calling convention where the first two
  671.      arguments are passed in registers.
  672.      This calling convention is incompatible with the one normally used
  673.      on Unix, so you cannot use it if you need to call libraries
  674.      compiled with the Unix compiler.
  675. `-mnoregparam'
  676.      Do not pass any arguments in registers. This is the default for all
  677.      targets.
  678. `-msb'
  679.      It is OK to use the sb as an index register which is always loaded
  680.      with zero. This is the default for the pc532-netbsd target.
  681. `-mnosb'
  682.      The sb register is not available for use or has not been
  683.      initialized to zero by the run time system. This is the default
  684.      for all targets except the pc532-netbsd. It is also implied
  685.      whenever `-mhimem' or `-fpic' is set.
  686. `-mhimem'
  687.      Many ns32000 series addressing modes use displacements of up to
  688.      512MB.  If an address is above 512MB then displacements from zero
  689.      can not be used.  This option causes code to be generated which
  690.      can be loaded above 512MB.  This may be useful for operating
  691.      systems or ROM code.
  692. `-mnohimem'
  693.      Assume code will be loaded in the first 512MB of virtual address
  694.      space.  This is the default for all platforms.
  695. File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
  696. Options for Code Generation Conventions
  697. =======================================
  698.    These machine-independent options control the interface conventions
  699. used in code generation.
  700.    Most of them have both positive and negative forms; the negative form
  701. of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
  702. forms is listed--the one which is not the default.  You can figure out
  703. the other form by either removing `no-' or adding it.
  704. `-fexceptions'
  705.      Enable exception handling. Generates extra code needed to propagate
  706.      exceptions.  For some targets, this implies generation of frame
  707.      unwind information for all functions. This can produce significant
  708.      data size overhead, although it does not affect execution.  If you
  709.      do not specify this option, it is enabled by default for languages
  710.      like C++ which normally require exception handling, and disabled
  711.      for languages like C that do not normally require it.  However,
  712.      when compiling C code that needs to interoperate properly with
  713.      exception handlers written in C++, you may need to enable this
  714.      option.  You may also wish to disable this option is you are
  715.      compiling older C++ programs that don't use exception handling.
  716. `-fpcc-struct-return'
  717.      Return "short" `struct' and `union' values in memory like longer
  718.      ones, rather than in registers.  This convention is less
  719.      efficient, but it has the advantage of allowing intercallability
  720.      between GCC-compiled files and files compiled with other compilers.
  721.      The precise convention for returning structures in memory depends
  722.      on the target configuration macros.
  723.      Short structures and unions are those whose size and alignment
  724.      match that of some integer type.
  725. `-freg-struct-return'
  726.      Use the convention that `struct' and `union' values are returned
  727.      in registers when possible.  This is more efficient for small
  728.      structures than `-fpcc-struct-return'.
  729.      If you specify neither `-fpcc-struct-return' nor its contrary
  730.      `-freg-struct-return', GCC defaults to whichever convention is
  731.      standard for the target.  If there is no standard convention, GCC
  732.      defaults to `-fpcc-struct-return', except on targets where GCC is
  733.      the principal compiler.  In those cases, we can choose the
  734.      standard, and we chose the more efficient register return
  735.      alternative.
  736. `-fshort-enums'
  737.      Allocate to an `enum' type only as many bytes as it needs for the
  738.      declared range of possible values.  Specifically, the `enum' type
  739.      will be equivalent to the smallest integer type which has enough
  740.      room.
  741. `-fshort-double'
  742.      Use the same size for `double' as for `float'.
  743. `-fshared-data'
  744.      Requests that the data and non-`const' variables of this
  745.      compilation be shared data rather than private data.  The
  746.      distinction makes sense only on certain operating systems, where
  747.      shared data is shared between processes running the same program,
  748.      while private data exists in one copy per process.
  749. `-fno-common'
  750.      Allocate even uninitialized global variables in the bss section of
  751.      the object file, rather than generating them as common blocks.
  752.      This has the effect that if the same variable is declared (without
  753.      `extern') in two different compilations, you will get an error
  754.      when you link them.  The only reason this might be useful is if
  755.      you wish to verify that the program will work on other systems
  756.      which always work this way.
  757. `-fno-ident'
  758.      Ignore the `#ident' directive.
  759. `-fno-gnu-linker'
  760.      Do not output global initializations (such as C++ constructors and
  761.      destructors) in the form used by the GNU linker (on systems where
  762.      the GNU linker is the standard method of handling them).  Use this
  763.      option when you want to use a non-GNU linker, which also requires
  764.      using the `collect2' program to make sure the system linker
  765.      includes constructors and destructors.  (`collect2' is included in
  766.      the GCC distribution.)  For systems which *must* use `collect2',
  767.      the compiler driver `gcc' is configured to do this automatically.
  768. `-finhibit-size-directive'
  769.      Don't output a `.size' assembler directive, or anything else that
  770.      would cause trouble if the function is split in the middle, and the
  771.      two halves are placed at locations far apart in memory.  This
  772.      option is used when compiling `crtstuff.c'; you should not need to
  773.      use it for anything else.
  774. `-fverbose-asm'
  775.      Put extra commentary information in the generated assembly code to
  776.      make it more readable.  This option is generally only of use to
  777.      those who actually need to read the generated assembly code
  778.      (perhaps while debugging the compiler itself).
  779.      `-fno-verbose-asm', the default, causes the extra information to
  780.      be omitted and is useful when comparing two assembler files.
  781. `-fvolatile'
  782.      Consider all memory references through pointers to be volatile.
  783. `-fvolatile-global'
  784.      Consider all memory references to extern and global data items to
  785.      be volatile.  GCC does not consider static data items to be
  786.      volatile because of this switch.
  787. `-fvolatile-static'
  788.      Consider all memory references to static data to be volatile.
  789. `-fpic'
  790.      Generate position-independent code (PIC) suitable for use in a
  791.      shared library, if supported for the target machine.  Such code
  792.      accesses all constant addresses through a global offset table
  793.      (GOT).  The dynamic loader resolves the GOT entries when the
  794.      program starts (the dynamic loader is not part of GCC; it is part
  795.      of the operating system).  If the GOT size for the linked
  796.      executable exceeds a machine-specific maximum size, you get an
  797.      error message from the linker indicating that `-fpic' does not
  798.      work; in that case, recompile with `-fPIC' instead.  (These
  799.      maximums are 16k on the m88k, 8k on the Sparc, and 32k on the m68k
  800.      and RS/6000.  The 386 has no such limit.)
  801.      Position-independent code requires special support, and therefore
  802.      works only on certain machines.  For the 386, GCC supports PIC for
  803.      System V but not for the Sun 386i.  Code generated for the IBM
  804.      RS/6000 is always position-independent.
  805. `-fPIC'
  806.      If supported for the target machine, emit position-independent
  807.      code, suitable for dynamic linking and avoiding any limit on the
  808.      size of the global offset table.  This option makes a difference
  809.      on the m68k, m88k, and the Sparc.
  810.      Position-independent code requires special support, and therefore
  811.      works only on certain machines.
  812. `-ffixed-REG'
  813.      Treat the register named REG as a fixed register; generated code
  814.      should never refer to it (except perhaps as a stack pointer, frame
  815.      pointer or in some other fixed role).
  816.      REG must be the name of a register.  The register names accepted
  817.      are machine-specific and are defined in the `REGISTER_NAMES' macro
  818.      in the machine description macro file.
  819.      This flag does not have a negative form, because it specifies a
  820.      three-way choice.
  821. `-fcall-used-REG'
  822.      Treat the register named REG as an allocable register that is
  823.      clobbered by function calls.  It may be allocated for temporaries
  824.      or variables that do not live across a call.  Functions compiled
  825.      this way will not save and restore the register REG.
  826.      It is an error to used this flag with the frame pointer or stack
  827.      pointer.  Use of this flag for other registers that have fixed
  828.      pervasive roles in the machine's execution model will produce
  829.      disastrous results.
  830.      This flag does not have a negative form, because it specifies a
  831.      three-way choice.
  832. `-fcall-saved-REG'
  833.      Treat the register named REG as an allocable register saved by
  834.      functions.  It may be allocated even for temporaries or variables
  835.      that live across a call.  Functions compiled this way will save
  836.      and restore the register REG if they use it.
  837.      It is an error to used this flag with the frame pointer or stack
  838.      pointer.  Use of this flag for other registers that have fixed
  839.      pervasive roles in the machine's execution model will produce
  840.      disastrous results.
  841.      A different sort of disaster will result from the use of this flag
  842.      for a register in which function values may be returned.
  843.      This flag does not have a negative form, because it specifies a
  844.      three-way choice.
  845. `-fpack-struct'
  846.      Pack all structure members together without holes.  Usually you
  847.      would not want to use this option, since it makes the code
  848.      suboptimal, and the offsets of structure members won't agree with
  849.      system libraries.
  850. `-fcheck-memory-usage'
  851.      Generate extra code to check each memory access.  GCC will generate
  852.      code that is suitable for a detector of bad memory accesses such as
  853.      `Checker'.
  854.      Normally, you should compile all, or none, of your code with this
  855.      option.
  856.      If you do mix code compiled with and without this option, you must
  857.      ensure that all code that has side effects and that is called by
  858.      code compiled with this option is, itself, compiled with this
  859.      option.  If you do not, you might get erroneous messages from the
  860.      detector.
  861.      If you use functions from a library that have side-effects (such as
  862.      `read'), you might not be able to recompile the library and
  863.      specify this option.  In that case, you can enable the
  864.      `-fprefix-function-name' option, which requests GCC to encapsulate
  865.      your code and make other functions look as if they were compiled
  866.      with `-fcheck-memory-usage'.  This is done by calling "stubs",
  867.      which are provided by the detector.  If you cannot find or build
  868.      stubs for every function you call, you might have to specify
  869.      `-fcheck-memory-usage' without `-fprefix-function-name'.
  870.      If you specify this option, you can not use the `asm' or `__asm__'
  871.      keywords in functions with memory checking enabled.  The compiler
  872.      cannot understand what the `asm' statement will do, and therefore
  873.      cannot generate the appropriate code, so it is rejected.  However,
  874.      the function attribute `no_check_memory_usage' will disable memory
  875.      checking within a function, and `asm' statements can be put inside
  876.      such functions.  Inline expansion of a non-checked function within
  877.      a checked function is permitted; the inline function's memory
  878.      accesses won't be checked, but the rest will.
  879.      If you move your `asm' statements to non-checked inline functions,
  880.      but they do access memory, you can add calls to the support code
  881.      in your inline function, to indicate any reads, writes, or copies
  882.      being done.  These calls would be similar to those done in the
  883.      stubs described above.
  884. `-fprefix-function-name'
  885.      Request GCC to add a prefix to the symbols generated for function
  886.      names.  GCC adds a prefix to the names of functions defined as
  887.      well as functions called.  Code compiled with this option and code
  888.      compiled without the option can't be linked together, unless stubs
  889.      are used.
  890.      If you compile the following code with `-fprefix-function-name'
  891.           extern void bar (int);
  892.           void
  893.           foo (int a)
  894.           {
  895.             return bar (a + 5);
  896.           }
  897.      GCC will compile the code as if it was written:
  898.           extern void prefix_bar (int);
  899.           void
  900.           prefix_foo (int a)
  901.           {
  902.             return prefix_bar (a + 5);
  903.           }
  904.      This option is designed to be used with `-fcheck-memory-usage'.
  905. `-finstrument-functions'
  906.      Generate instrumentation calls for entry and exit to functions.
  907.      Just after function entry and just before function exit, the
  908.      following profiling functions will be called with the address of
  909.      the current function and its call site.  (On some platforms,
  910.      `__builtin_return_address' does not work beyond the current
  911.      function, so the call site information may not be available to the
  912.      profiling functions otherwise.)
  913.           void __cyg_profile_func_enter (void *this_fn, void *call_site);
  914.           void __cyg_profile_func_exit  (void *this_fn, void *call_site);
  915.      The first argument is the address of the start of the current
  916.      function, which may be looked up exactly in the symbol table.
  917.      This instrumentation is also done for functions expanded inline in
  918.      other functions.  The profiling calls will indicate where,
  919.      conceptually, the inline function is entered and exited.  This
  920.      means that addressable versions of such functions must be
  921.      available.  If all your uses of a function are expanded inline,
  922.      this may mean an additional expansion of code size.  If you use
  923.      `extern inline' in your C code, an addressable version of such
  924.      functions must be provided.  (This is normally the case anyways,
  925.      but if you get lucky and the optimizer always expands the
  926.      functions inline, you might have gotten away without providing
  927.      static copies.)
  928.      A function may be given the attribute `no_instrument_function', in
  929.      which case this instrumentation will not be done.  This can be
  930.      used, for example, for the profiling functions listed above,
  931.      high-priority interrupt routines, and any functions from which the
  932.      profiling functions cannot safely be called (perhaps signal
  933.      handlers, if the profiling routines generate output or allocate
  934.      memory).
  935. `-fstack-check'
  936.      Generate code to verify that you do not go beyond the boundary of
  937.      the stack.  You should specify this flag if you are running in an
  938.      environment with multiple threads, but only rarely need to specify
  939.      it in a single-threaded environment since stack overflow is
  940.      automatically detected on nearly all systems if there is only one
  941.      stack.
  942. `-fargument-alias'
  943. `-fargument-noalias'
  944. `-fargument-noalias-global'
  945.      Specify the possible relationships among parameters and between
  946.      parameters and global data.
  947.      `-fargument-alias' specifies that arguments (parameters) may alias
  948.      each other and may alias global storage.  `-fargument-noalias'
  949.      specifies that arguments do not alias each other, but may alias
  950.      global storage.  `-fargument-noalias-global' specifies that
  951.      arguments do not alias each other and do not alias global storage.
  952.      Each language will automatically use whatever option is required by
  953.      the language standard.  You should not need to use these options
  954.      yourself.
  955. `-fleading-underscore'
  956.      This option and its counterpart, -fno-leading-underscore, forcibly
  957.      change the way C symbols are represented in the object file.  One
  958.      use is to help link with legacy assembly code.
  959.      Be warned that you should know what you are doing when invoking
  960.      this option, and that not all targets provide complete support for
  961.      it.
  962.